Android 6 by Massimo Carli

Android 6 by Massimo Carli

autore:Massimo Carli [Carli, Massimo]
La lingua: ita
Format: epub
ISBN: 8123fbc96339ac3f30de431aba56651468414ba8
editore: Apogeo
pubblicato: 2016-04-11T16:00:00+00:00


Utilizzare elementi di tipo diverso

Nella parte dedicata all’utilizzo delle ListView abbiamo visto come sia possibile gestire righe di tipo diverso attraverso alcuni metodi dell’Adapter che ritroviamo anche nel caso della RecyclerView e che permettono di risolvere il problema in modo analogo. Per vedere in dettaglio questo meccanismo per le RecyclerView realizziamo un esempio analogo, che ci permetta di visualizzare le righe con colore di background alternato.

NOTA

Sebbene il problema sia molto semplice, anche in questo caso utilizziamo una soluzione che può essere applicata anche nel caso in cui le differenze fossero molto più spiccate del solo colore di sfondo.

Abbiamo creato la classe AlternateStopListFragment, che abbiamo ottenuto dalle precedenti eliminando il codice non strettamente legato alla funzionalità. Se osserviamo il codice dell’esempio notiamo come l’unica differenza rispetto al caso precedente sia data dall’implementazione dell’Adapter, che ora è la seguente:

public final static class BusStopAdapter extends

RecyclerView.Adapter<BusStopViewHolder> {

private final List<BusStop> mModel;

BusStopAdapter(final List<BusStop> model) {

this.mModel = model;

}

@Override

public BusStopViewHolder onCreateViewHolder(ViewGroup viewGroup,

int viewType) {

final View layout;

if (viewType == 0) {

layout = LayoutInflater.from(viewGroup.getContext())

.inflate(R.layout.bus_stop_layout, viewGroup, false);

} else {

layout = LayoutInflater.from(viewGroup.getContext())

.inflate(R.layout.bus_stop_layout2, viewGroup, false);

}

return new BusStopViewHolder(layout);

}

@Override

public void onBindViewHolder(BusStopViewHolder busStopViewHolder, int position) {

busStopViewHolder.bind(mModel.get(position));

}

@Override

public int getItemCount() {

return mModel.size();

}

@Override

public int getItemViewType(int position) {

return position % 2;

}

}

A differenza di quello che avveniva nell’Adapter della ListView, ora non ci serve sapere quanti sono i tipi diversi di View, ma ci serve semplicemente associare un id a ciascuna di esse in base alla loro posizione. Questo viene fatto attraverso il metodo:

public int getItemViewType(int position)

Il valore restituito lo ritroviamo poi come secondo parametro del metodo seguente, che andiamo a utilizzare per creare l’istanza corretta di ViewHolder:

public BusStopViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)

Nel nostro caso, entrambe le righe sono gestite dallo stesso tipo di ViewHolder, differenziandosi semplicemente per il documento di layout da caricare. Nel caso in cui le View fossero molto diverse tra loro, avremmo dovuto istanziare dei ViewHolder descritti da classi diverse, che non solo caricavano documenti di layout diversi, ma implementavano anche logiche di bind diverse. In questo caso il risultato è ancora quello rappresentato nella Figura 7.28.



scaricare



Disconoscimento:
Questo sito non memorizza alcun file sul suo server. Abbiamo solo indice e link                                                  contenuto fornito da altri siti. Contatta i fornitori di contenuti per rimuovere eventuali contenuti di copyright e inviaci un'email. Cancelleremo immediatamente i collegamenti o il contenuto pertinenti.